// pages/cart/cart.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address: {},  //收货地址
    cart: [],      //添加到购物车的数据
    checkedAll: false,  //全选按钮
    totalprice: 0,     //总价
    totalnum: 0,      //总数量
    checked: true
  },
  // 购物车数据处理函数
  // 该函数主要负责购物车内  cart, checkedAll, totalprice, totalnum  
  // 数据的处理，以及将数据再存入缓存，及data中
  cartset(cart) {   //将cart作为参数传入函数进行处理
    //拿到cart对象，先存到缓存中
    wx.setStorageSync('cart', cart)
    //重新赋值
    let checkedAll = cart.length > 0 ? cart.every(v => v.checked) : false  //every遍历数组
    // every() 方法用于检测数组所有元素是否都符合指定条件（通过函数提供）。
    // every() 方法使用指定函数检测数组中的所有元素：
    // •	如果数组中检测到有一个元素不满足，则整个表达式返回 false ，且剩余的元素不会再进行检测。
    // •	如果所有元素都满足条件，则返回 true。
    // 注意： every() 不会对空数组进行检测。
    // 注意： every() 不会改变原始数组。

    let totalprice = 0
    let totalnum = 0
    cart.forEach(
      v => {
        if (v.checked) {
          totalprice += v.num * v.goods_price;
          totalnum += v.num;
        }
      }

    )
    this.setData({
      cart,
      checkedAll,
      totalprice,
      totalnum
    })
  },

  //handleitemchange 用于监视购物车中的商品选中按钮 
  handleitemchange(e) {
    //获取传递的商品id
    let goods_id = e.currentTarget.dataset.id
    // console.log(doods_id)
    let { cart } = this.data
    //获取到当前选中的商品的index，是cart中的第几个
    let index = cart.findIndex(v => v.goods_id === goods_id)
    //修改商品前的选购checked值
    cart[index].checked = !cart[index].checked
    // this.setData({   
    //   cart
    // })
    //保存修改
    this.cartset(cart)
  },

  //获取收货地址函数方法，分两种进行
  handleChooseAddress() {
    // console.log("...")
    //获取用户权限
    wx.getSetting({   //getSetting中有用户最基本的权限请求
      success: res => {
        // console.log(res)
        if (res.authSetting['scope.address'] === true || res.authSetting['scope.address'] === undefined) {
          //  获取收货地址
          wx.chooseAddress({
            success: (res1) => {
              let address = res1
              // console.log(address)
              wx.setStorageSync('address', address)  //将得到的地址缓存
            }

          })
        }
        else {    //拒绝获取地址后，重新获得权限获取地址
          wx.openSetting({
            success: (res2) => {
              // console.log(res2)
              //  获取收货地址
              wx.chooseAddress({
                success: (res3) => {
                  // console.log(res3)
                  let address = res3
                  // console.log(address)
                  wx.setStorageSync('address', address)
                }
              })
            },
          });
        }
      }
    })
  },

  //购物车中商品的数量的加减
  handleItemNum(e) {
    // console.log("戴安极了")

    //接受两个参数
    let { id, operation } = e.currentTarget.dataset
    //将data中的cart解构出来
    let { cart } = this.data
    const index = cart.findIndex(v => v.goods_id === id)
    // console.log(index)
    if (cart[index].num === 1 && operation === -1) {
      wx.showModal({     //弹出对话框
        title: '提示',
        content: '你是要删除此商品吗',
        success: (res) => {
          if (res.confirm) {
            cart.splice(index, 1)
            this.cartset(cart)
          } else if (res.cancel) {

          }
        }
      })
    } else {
      cart[index].num += operation
      this.cartset(cart)
    }

  },


  //结算功能
  handlePay() {
    //通过对地址，商品的有无，来判断，是否跳转到支付页面
    let { address, totalnum } = this.data
    if (address.length === 0) {
      wx.showToast({
        title: '你还没有填写收货地址',
      })
      return
    }
    if (totalnum === 0) {
      wx.showToast({
        title: '你还没有选购商品',
      })
      return
    }

    wx.navigateTo({
      url: '/pages/pay/pay',
    })

  },


 

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },
 
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    let address = wx.getStorageSync("address")
    let cart = wx.getStorageSync('cart') || []
    cart=cart.filter(v=>v.checked===true)
   
    //拿到cart对象，先存到缓存中
    wx.setStorageSync('cart', cart)
    let totalprice = 0
    let totalnum = 0
    cart.forEach(
      v => {
       
          totalprice += v.num * v.goods_price;
          totalnum += v.num;
        
      }

    )
    this.setData({
      cart,
      totalprice,
      totalnum,
      address
    })

  }, 

//点击支付功能
  handleOrderPay(){
    const token=wx.getStorageSync('token')
    if(token)
    {
      console.log("存在")
       //1.准备请求头参数
      const header={ Authorization:token}      
       //2.准备请求体参数
      const order_price=this.data.totalprice  
      const consignee_addr=this.data.address.all  
      const goods=[] 
      const cart=this.data.cart
      cart.forEach(v=>{
        goods.push(
          {
            goods_id: v.goods_id,
            goods_number:v.num,
            goods_price:v.goods_price
          }
        )
      })
      const orderParams = { order_price, consignee_addr, goods}
      //3.发送请求，获取订单编号
      request({    //请求具体的内容，参考文档
        url:"/my/orders/create",
        methods:"POST",
        data: orderParams,
        header: header
      }).then(res=>{
        const { order_number}=res
      })
      //4.发起预支付接口
      request({
        url:"/my/orders/req_unifiedorder",
        methods:"POST",
        header: { order_number}
      }).then(res=>{        //返回值中就有微信支付的传递参数
        const {pay}=res
      })
      //5.发起微信支付
      wx.requestPayment({
      ...pay,
      success:res=>{
console.log(res)   //返回信息中会有success
      },
      })
//6.查询后台订单状态
      request({
        url: "/my/orders/chkOrder",
        methods: "POST",
        header: { order_number }
      }).then(res => {        //返回值中就有后端返回的是否成功的信息
       console.log(res0)
      })
//7.清除订单中的以选中的商品
let cart1=wx.getStorageSync("cart")
const newCart=cart1.filter(v=>{
!v.checked
})
wx.setStorageSync("cart", newCart)

//8.再次返回订单页面
wx.navigateTo({
  url: '/pages/pay/pay',
})

    }
    else{
      console.log("没有token")
      wx.navigateTo({
        url: '../auth/auth',
      })
    }
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})